iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
0

我們在[Day 4] CI基本設定有提到database的相關設定!今天我們要接續來說CI要怎麼操作資料庫!

CRUD

SELECT (R) 查詢紀錄

原始SQL:

SELECT `name` FROM `data` WHERE `data_id` = <ID>;

先來對照一下
原生PHP寫法(使用PDO)

function originalPhp($id) {
    $dbhost = '127.0.0.1';
    $dbuser = 'root';
    $dbpasswd = '';
    $dbname = 'ironman2020';
    $dsn = "mysql:host=".$dbhost.";dbname=".$dbname;
    
    try
    {
        $conn = new PDO($dsn,$dbuser,$dbpasswd);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    catch(PDOException $e)
    {
        echo "Connection failed: ".$e->getMessage();
    }

    $sql = "SELECT `name` FROM `data` WHERE `data_id` = " . $id .";"; //$id 是data id
    $sth = $conn->prepare($sql);
    $sth->execute();
    $rows = $sth->fetchAll(PDO::FETCH_ASSOC);
    return $rows;
}

CI 寫法

function selectCi($id) {
    $db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
    return $db
    ->from('data')
    ->where(
        array(
            'data_id' => $id
        )
    )
    ->select('name')
    ->get()
    ->result_array(); //就這樣! 夠簡潔吧!
}

CREATE (C) 新增紀錄

原始SQL:

INSERT INTO `data` (`name`) VALUES ('test')

CI 寫法

function createCi() {
    $db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
    $db
        ->set(
            array(
                'name' => 'test'
            )
        )
        ->insert('data');
}

UPDATE (U) 更新紀錄

原始SQL:

UPDATE `data` SET `name` = 'change' WHERE `data_id` = <id>;

CI 寫法

function createCi() {
    $db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
    $db
        ->set(
            array(
                'name' => 'change'
            )
        )
        ->where('data_id',$id)
        ->update('data');
}

DELETE (D) 刪除紀錄

原始SQL:

DELETE FROM `data` WHERE `data_id` = <id>;

CI 寫法

function createCi() {
    $db = $this->load->database('default',true); //指定資料庫連線,default要對應到/config/database.php中$db的key
    $db
        ->where('data_id',$id)
        ->delete('data');
}

因時間及篇幅問題,只有寫最基本的,詳細的可以參考:https://codeigniter.org.tw/userguide3/database/query_builder.html


上一篇
[Day 7] 路由
下一篇
[Day 9] 短網址產生器
系列文
三十天攻略RESTful API (使用codeigniter3)15
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
ckp6250
iT邦好手 1 級 ‧ 2020-09-26 11:23:34

看了文末所附網址的文章之後,

我有一個錯覺,CI所提供的一堆資料庫相關的函數、類別、函數等等,也是一土拉谷,花樣百出、份量不少,要完全搞通也不容易,和學習 pdo 或原生 sql ,差不多一樣辛苦。

Franky Chen iT邦研究生 3 級 ‧ 2020-09-26 21:34:51 檢舉

對!其實就是這樣
但是框架可以解決很多事情,像是換資料庫系統的時候只要改config,他也幫你解決了很多麻煩事,像防SQL injection之類的
還有你不覺得寫->比寫SQL語句好看多了嗎(易讀性)!

ckp6250 iT邦好手 1 級 ‧ 2020-09-27 05:31:32 檢舉

請教一下,是否其它框架,也會有類似的一土拉谷的資料庫操作類別函數?

Franky Chen iT邦研究生 3 級 ‧ 2020-09-27 16:02:06 檢舉

你也可以看看laravel的!
https://laravel.com/docs/8.x/queries

我要留言

立即登入留言